package com.yunsc.common.desensitize;

import org.apache.commons.lang.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @version: 1.0
 * @Author: adan
 * @description: 脱敏类型枚举
 * @date: 2024-05-08 22:02
 */
public enum DesensitizeType {
    TEL, PASSWORD, ID_CARD, EMAIL, CUSTOM;

    /**
     * 手机号脱敏
     *
     * @param tel    手机号
     * @param symbol 脱敏符号
     * @return 脱敏后的手机号
     */
    public static String tel(String tel, String symbol) {
        if (tel.matches("^1[3-9]\\d{9}$")) {
            // return tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1" + symbol + "$2");
            // return tel.substring(0, 3) + symbol.repeat(4) + tel.substring(7);
            return tel.substring(0, 3) + StringUtils.repeat(symbol, 4) + tel.substring(7);
        }
        return tel;
    }

    /**
     * 密码脱敏
     *
     * @param password 密码
     * @param symbol   脱敏符号
     * @param length   脱敏长度
     * @return 脱敏后的密码
     */
    public static String password(String password, String symbol, int length) {
        return password != null ? StringUtils.repeat(symbol, length) : null;
    }

    /**
     * 邮箱脱敏
     *
     * @param email  邮箱
     * @param symbol 脱敏符号
     * @param length 脱敏长度
     * @return 脱敏后的身份证号
     */
    public static String email(String email, String symbol, int length) {
        if (email != null && email.matches("^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$")) {
            // return email.replaceAll("(\\w{3})\\w+(\\w{4})", "$1" + symbol + "$2");
            return StringUtils.repeat(symbol, length) + email.substring(email.indexOf("@"));
        }
        return email;
    }

    /**
     * 身份证号脱敏
     *
     * @param idCard 身份证号
     * @param symbol 脱敏符号
     * @param length 脱敏长度
     * @return 脱敏后的身份证号
     */
    public static String idCard(String idCard, String symbol, int length) {
        if (idCard != null && idCard.matches("^(^\\d{15}$|^\\d{18}$|^\\d{17}(\\d|X|x))$")) {
            return idCard.charAt(0) + StringUtils.repeat(symbol, length) + idCard.charAt(17);
        }
        return idCard;
    }

    /**
     * 自定义脱敏
     *
     * @param value  值
     * @param symbol 脱敏符号
     * @param length 脱敏长度
     * @param regex  正则表达式
     * @param group  正则表达式匹配组
     * @return 脱敏后的字符串
     */
    public static String custom(String value, String symbol, int length, String regex, int group) {
        // 编译正则表达式
        Pattern pattern = Pattern.compile(regex);
        // 匹配字符串
        Matcher matcher = pattern.matcher(value);
        // 如果匹配成功
        if (matcher.find()) {
            // return matcher.group(group) + StringUtils.repeat(symbol, length);
            // 获取匹配开始和结束位置
            int start = matcher.start();
            int end = matcher.end();
            // 返回替换后的字符串
            return value.substring(0, start) + StringUtils.repeat(symbol, length) + value.substring(end);
        }
        // 如果匹配失败，返回原字符串
        return value;
    }


}
